package org.hilo.boot.mybatis;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.plugins.annotations.Parameter;

import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder;

/**
 * 插件基类，用于属性配置 设计成抽象类主要是用于后期可扩展，共享参数配置。
 *
 * @author zollty
 * @since 2018-3-16
 */
public abstract class AbstractGenerateMojo extends AbstractMojo {
    private static final String NULL_STR = "null";
    /**
     * 全局配置
     */
    @Parameter(required = true)
    FastGlobalConfig global;

	/**
	 * 数据源配置
	 */
	@Parameter(required = true)
	private DataSourceConfig dataSource;

	/**
	 * 数据库表配置
	 */
	@Parameter
	private FastStrategyConfig strategy;

	/**
	 * 包 相关配置
	 */
	@Parameter
	private FastPackageConfig packageInfo;

	/**
	 * 模板 相关配置
	 */
	@Parameter
	private FastTemplateConfig template;

	protected ConfigBuilder config;

	/**
	 * 日志工具
	 */
	protected Log log = getLog();

	/**
	 * 初始化配置
	 */
	protected void initConfig() {
        if (null == config) {
            if (global == null) {
                global = new FastGlobalConfig();
            }
            if (strategy == null) {
                strategy = new FastStrategyConfig();
            }
            if (template == null) {
                template = new FastTemplateConfig();
            }
            if (NULL_STR.equalsIgnoreCase(global.getEntityName())) {
                global.setEntityName(null);
            }
            if (NULL_STR.equalsIgnoreCase(template.getXml())) {
                template.setXml(null);
            }
            config = new ConfigBuilder(packageInfo, dataSource, strategy, template, global);
        }
	}

}
